package com.ruoyi.common.utils;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class VideoRenamer {
    // 支持的视频文件扩展名
    private static final String[] VIDEO_EXTENSIONS = {
            ".mp4", ".avi", ".mov", ".mkv", ".flv", ".wmv", ".mpeg", ".mpg", ".m4v"
    };

    public static void main(String[] args) {
        // 设置视频目录路径（修改为你的实际路径）
        String videoDirPath = "C:\\Users\\lenovo\\Desktop\\返修\\sample20_merged_group_shuffled\\镜头距离太近\\猫\\宠物喝水";
        // 起始名称的序号部分
        int startingNumber = 051;

        try {
            // 获取视频文件列表（按最后修改时间排序）
            List<File> videoFiles = getSortedVideoFiles(videoDirPath);

            // 重命名文件
            int renamedCount = renameFiles(videoFiles, startingNumber);

            System.out.println("重命名完成！尝试处理 " + videoFiles.size() + " 个文件");
            System.out.println("成功重命名 " + renamedCount + " 个文件");
            System.out.println("跳过 " + (videoFiles.size() - renamedCount) + " 个文件（目标文件已存在）");
        } catch (Exception e) {
            System.err.println("处理出错: " + e.getMessage());
            e.printStackTrace();
        }
    }

    // 获取按最后修改时间排序的视频文件列表
    private static List<File> getSortedVideoFiles(String dirPath) throws Exception {
        File dir = new File(dirPath);
        if (!dir.exists() || !dir.isDirectory()) {
            throw new IllegalArgumentException("目录不存在或路径错误: " + dirPath);
        }

        return Files.list(Paths.get(dirPath))
                .filter(Files::isRegularFile)
                .filter(VideoRenamer::isVideoFile)
                .sorted(Comparator.comparingLong(p -> p.toFile().lastModified()))
                .map(Path::toFile)
                .collect(Collectors.toList());
    }

    // 检查是否是视频文件
    private static boolean isVideoFile(Path path) {
        String fileName = path.getFileName().toString().toLowerCase();
        for (String ext : VIDEO_EXTENSIONS) {
            if (fileName.endsWith(ext)) {
                return true;
            }
        }
        return false;
    }

    // 重命名文件（返回成功重命名的文件计数）
    private static int renameFiles(List<File> files, int startingNumber) throws Exception {
        int currentNumber = startingNumber;
        int renamedCount = 0;  // 成功重命名的文件计数器

        for (File original : files) {
            // 生成新文件名（B0 + 当前序号 + .mp4）
            String newName = "B00" + currentNumber + ".mp4";
            File target = new File(original.getParentFile(), newName);

            // 如果目标文件已存在，则跳过
            if (target.exists()) {
                System.out.println("跳过: " + original.getName() + " -> " + newName + " (目标文件已存在)");
            } else {
                // 执行重命名
                if (original.renameTo(target)) {
                    System.out.println("已重命名: " + original.getName() + " => " + newName);
                    renamedCount++;
                } else {
                    System.out.println("重命名失败: " + original.getName() + " -> " + newName);
                }
            }

            // 无论是否重命名成功，序号都递增
            currentNumber++;
        }

        return renamedCount;
    }
}
